import matplotlib.pyplot as plt
import numpy    as np


# 原函数
def function_1(x):
    y = 0.01 * (x ** 2) + 0.1 * x
    return y


# 近似微分值
def numerical_diff(f, x):
    h = 1e-4
    y = (f(x + h) - f(x - h)) / (2 * h)
    return y


# 近似切线
def tangle_line(f, x):
    d = numerical_diff(f, x)  # 拿到真实斜率
    print('近似切线的斜率是： ' + str(d))

    y = f(x) - d * x  # 拿到x点的真实切线的坐标
    return lambda t: d * t + y


def true_tf(x):
    return 0.2 * x


def daohanshu(x):
    return 0.02 * x + 0.1


if __name__ == '__main__':
    x = np.arange(0.0, 20.0, 0.1)
    y = function_1(x)

    # 完善图像
    plt.title('Function Image')
    plt.xlabel('x')
    plt.ylabel('y')
    plt.ylim(-1, 6.5)

    tf = tangle_line(function_1, 5)
    y1 = tf(x)

    y2 = daohanshu(x)

    plt.plot(x, y, label='source_function')
    plt.plot(x, y1, label='true_tangle_line')
    plt.plot(x, y2, label='derived_funtcion')
    plt.legend()

    plt.show()
